import asyncio
import time


async def crawl_page(url):
    print('正在爬取 {}'.format(url))
    sleep_time = int(url.split('_')[-1])
    await asyncio.sleep(sleep_time)
    print('OK {}'.format(url))


async def main(urls):
    time_start = time.time()
    for url in urls:
        await crawl_page(url)
    time_end = time.time()
    print("爬取耗时共计{}s".format(int(time_end - time_start)))

'''
    async：声明这是一个异步函数。调用异步函数，就会得到一个协程对象。
    await：用于调用函数。注意，这里await 执行的效果，和 Python 正常执行是一样的。也就是说程序会阻塞在这里，进入被调用的协程函数，执行完毕返回后再继续。
    
    asyncio.run：触发运行。这个函数是 Python 3.7 之后才有的特性，目的就是让Python 的协程接口变得非常简单。
    通常情况下，asyncio.run(main()) 作为主程序的入口函数，在程序运行周期内，只调用一次 asyncio.run。
'''
if __name__ == '__main__':
    asyncio.run(main(['url_1', 'url_2', 'url_3', 'url_4']))